package kr.co.iristech.csr;

import java.io.File;
import java.util.List;

import kr.co.iristech.csr.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;


public class CameraCropActivity extends Activity implements OnClickListener
{
	private static final int PICK_FROM_SCAN = 0;
	private static final int PICK_FROM_ALBUM = 1;
	private static final int CROP_FROM_CAMERA = 2;
	private static final String LOGTAG = "* ScanCropActivity";

	private Uri mImageCaptureUri;
	private ImageView mPhotoImageView;
	private Button mButton;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		mButton = (Button) findViewById(R.id.button);
		mPhotoImageView = (ImageView) findViewById(R.id.image);
		
		mButton.setOnClickListener(this);
	}

	/**
	 * CamScanner 를 사용
	 */
	private void doTakeScanAction()
	{
		Log.d(LOGTAG, "PICK_FROM_SCAN");
		startActivity(getPackageManager().getLaunchIntentForPackage("com.intsig.camscanner"));
	}
	
	/**
	 * 앨범에서 이미지 가져오기
	 */
	private void doTakeAlbumAction()
	{
		// 앨범 호출
		Intent intent = new Intent(Intent.ACTION_PICK);
		intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
		startActivityForResult(intent, PICK_FROM_ALBUM);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if(resultCode != RESULT_OK)
		{
			return;
		}

		switch(requestCode)
		{
			case CROP_FROM_CAMERA:
			{
				// 크롭이 된 이후의 이미지를 넘겨 받습니다.
				// 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
				// 임시파일을 삭제합니다.
				final Bundle extras = data.getExtras();
	
				if(extras != null)
				{
					Bitmap photo = extras.getParcelable("data");
					mPhotoImageView.setImageBitmap(photo);
				}
	
				// 임시파일 삭제
				File f = new File(mImageCaptureUri.getPath());
				if(f.exists())
				{
					f.delete();
				}
	
				break;
			}
	
			case PICK_FROM_ALBUM:
			{
				// 이후의 처리가 카메라와 같으므로 일단 break 없이 진행합니다.
				// 실제 코드에서는 좀더 하바리적인 방법을 선택하시기 바랍니다.
				Log.d(LOGTAG, "PICK_FROM_ALBUM");
				
				mImageCaptureUri = data.getData();
				
				Intent intent = new Intent("com.android.camera.action.CROP");
				intent.setDataAndType(mImageCaptureUri, "image/*");
	
				intent.putExtra("outputX", 90);
				intent.putExtra("outputY", 90);
				intent.putExtra("aspectX", 1);
				intent.putExtra("aspectY", 1.618);
				intent.putExtra("scale", true);
				intent.putExtra("return-data", true);
				startActivityForResult(intent, CROP_FROM_CAMERA);
	
				break;
			      
				
			}	
			
		}
	}

	@Override
	public void onClick(View v)
	{
		DialogInterface.OnClickListener cameraListener = new DialogInterface.OnClickListener()
		{
			@Override
			public void onClick(DialogInterface dialog, int which)
			{				
				doTakeScanAction();
			}
		};
		
		DialogInterface.OnClickListener albumListener = new DialogInterface.OnClickListener()
		{
			@Override
			public void onClick(DialogInterface dialog, int which)
			{
				doTakeAlbumAction();
			}
		};
		
		DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener()
		{
			@Override
			public void onClick(DialogInterface dialog, int which)
			{
				dialog.dismiss();
			}
		};
		
		new AlertDialog.Builder(this)
			.setTitle("업로드할 이미지 선택")
			.setPositiveButton("CamScanner", cameraListener)
			.setNeutralButton("앨범선택", albumListener)
			.setNegativeButton("취소", cancelListener)
			.show();
	}
}